<?php
 
/* Esta classe serve apenas para controlar o sistema de permissão para controllers
 * e actions. Para que seja restringido outras funcionalidades deverá ser criado outra
 * class.
 * 
 * @author Bruno da Costa Monteiro <Bruno da Costa Monteiro>
 */
class Fans_Controller_Plugin_Security extends Zend_Controller_Plugin_Abstract 
{
 
    /**
     * Função que irá verificar se o usuário tem acesso ou não a determina parte do sistema.
     * Para que esta função funcione a classe deverá ser chamada no config.ini, sendo um plugin
     * 
     * @param Zend_Controller_Request_Abstract $request
     * @throws Exception
     * @author Bruno da Costa Monteiro <Bruno da Costa Monteiro>
     */
    public function  preDispatch(Zend_Controller_Request_Abstract $request) 
    {
        $acl        = Zend_Registry::get('acl');                                # pega o acl passado no bootstrap
        $identity   = Zend_Auth::getInstance()->getIdentity();                  # pega toda a sessao da autenticação
        $controller = $request->getParam('controller', 'index');                # saber qual será o controller utilizado
        $action     = $request->getParam('action', 'index');                    # saber qual será o action utilizado
        $module     = $request->getParam('module', 'default');                  # saber qual será o action utilizado
        $role       = '0';     
 
        //-- Pega o grupo do usuário como regra para acesso do controller->action.
        if ($identity) {
            $role = isset($identity->id_tipo_perfil) ? $identity->id_tipo_perfil : '0';
        }
         
        //-- Mostrar mensagem de página não encontrada caso o resource não exista
        if (!in_array($module.':'.$controller, $acl->getResources())) {
            die('<center>
                    <div style="margin-top: 200px;">
                        <div style="font: bold 20px verdana;">P&aacute;gina n&atilde;o encontrada!</div><br />
                        O endere&ccedil;o informado n&atilde;o foi encontrado, favor verificar se todas as informa&ccedil;&otilde;es foram passadas corretamente.
                     </div>
                 </center>');
        }
         
        //-- Se não for permitido para as regras acontecerá isso!
        if ($acl->isAllowed($role, $module.':'.$controller, $action)) {
            //-- acessar normalmente... (sem funçao por enquanto)...
             
        } else {
            //-- Redirecionar para a área de login do intranet
            //$redirector = Zend_Controller_Action_HelperBroker::getStaticHelper('redirector');
            //$redirector->gotoUrl('/index/index/index');
             
            echo '
            <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
            <html>
            <head>
                <title>SEEDF - Módulo de Remanejamento - Sessão Expirada</title>
                <script type="text/javascript">
                    window.setTimeout("location.href=\'/remanejamento/login/index/\'",25000)
                </script>
                <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
            </head>
            <body>
                <div style="font: bold 24px tahoma;">
                    Sessão Expirada.
                </div>
                <div style="font: 14px tahoma; font-style: italic">
                    A área que você esta tentando acessar é uma área restrita ao seu grupo de usuário.<br />
                </div>
                <hr />
                <div style="font: 14px tahoma; margin: 20px 0px;">
                    <strong>Esta mensagem pode estar aparecendo por um dos seguintes motivos:</strong><br />
                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>1-</strong> Sua sessão expirou enquanto você estava navegando pelo site.<br />
                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>2-</strong> Você esta tentando acessar uma área que você não possui permissão.<br />
                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>3-</strong> Você foi direcionado acidentalmente para este link.<br />
                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>4-</strong> A área que você procura no site não existe mais.<br />
                </div>
                <hr />
            </body>
            </html>';
 
            die('');
            throw new Exception('Sessão Expirada.');                            # mostra mensagem de erro caso a mensagem de die não funcione!
        }
    }
}